package com.mall.malllibrary.util.storage

// 数据存储，使用private constructor()表示不可实例化，只能类访问
class MemoryStorage private constructor(){
    // 线程安全的单例模式， object表示的单利
    private object Holder{
        internal val INSTANCE = MemoryStorage()
    }

    // 类似于静态内部类，关键字组合companion object类似于static，可以类型直接访问
    companion object{
        val instance: MemoryStorage
            get() = Holder.INSTANCE
    }

    //数据存储类的map
    private val mDataMap = HashMap<String, Any>();

    // 新增存储
    fun addData(key: String, data:Any):MemoryStorage{
        mDataMap[key] = data
        return this;
    }

    // 获取数据
    fun <T>getData(key : String) :T {
        @Suppress("UNCHECKED_CAST")
        return mDataMap[key] as T
    }
    // 新增存储枚举类key
    fun addData(key: Enum<*>, data:Any):MemoryStorage{
        addData(key.name, data)
        return this;
    }
    // h获取数据。枚举类key
    fun <T>getData(key : Enum<*>) :T {
        @Suppress("UNCHECKED_CAST")
        return mDataMap[key.name] as T
    }
}